
package com.love.cloud.admin.api.provider;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.love.cloud.admin.api.dto.ManagerDTO;
import com.love.cloud.admin.api.dto.UserInfo;
import com.love.cloud.admin.api.entity.DingTalkDeptConfig;
import com.love.cloud.admin.api.entity.SysDept;
import com.love.cloud.admin.api.entity.SysUser;
import com.love.cloud.admin.api.vo.UserVO;

import java.util.List;
import java.util.Set;

/**
 * @author hongdongqu
 */
public interface RemoteUserProvider {

	/**
	 * 通过用户id来获取到用户的信息
	 */
	UserInfo userInfoById(String userId);

	/**
	 * 通过用户名查询用户、角色信息
	 * @param username 用户名
	 * @return R
	 */
	UserInfo info(String username);
	/**
	 * 通过手机号获取到用户信息
	 */
	UserInfo infoByPhone(String phone);
	/**
	 * 通过浙政钉扫码登陆
	 */
	UserInfo infoByZZDQRCode(String QRCode, boolean autoAdd);
	/**
	 * 通过浙政钉账号id获取
	 */
	UserInfo infoByAccountId(String accountId);


	/**
	 * 通过浙政钉免登
	 */
	UserInfo infoByZZDingFreeLogin(String authCode);

	/**
	 * 根据userid查询信息
	 * @return
	 */
	SysUser getUser(String userId);

	/**
	 * 获取到部门信息通过浙政钉编码
	 * @return
	 */
	List<SysDept> getDeptInfoByDingOrgCodes(Set<String> dingOrgCodeSet);

	/**
	 * 通过部门id集合或者角色编号获取到用户列表
	 * @param deptIdList
	 * @param roleCode
	 * @return
	 */
	List<UserInfo> getUserInfoListByDeptOrRoleCode(List<Long> deptIdList, String roleCode);

	/**
	 * 获取到用户信息通过角色编号和部门名称或者用户名（中文名不是登录的userName）
	 * @param deptNameList
	 * @param roleCode
	 * @param name
	 * @return
	 */
	Page<UserInfo> getUserInfoListByDeptOrRoleCodeAndNamePage(Page<UserInfo> page, List<String> deptNameList, String roleCode, String name);

	/**
	 * 通过部门id获取到用户列表
	 * @return
	 */
	List<UserVO> getUserListDeptId(Long deptId);

	SysDept getDeptById(Long deptId);

	boolean updateOpenCodeByUserId(Long userId, String openCode);

	List<SysUser> getUsers(List<String> ids);
}
